Je fais encore du Python2 en 2024

Pourquoi s’infliger cette douleur ?

Julien Lenormand

Introduction

TODO : * soundboard

Présentation du speaker

Julien Lenormand

Ingénieur informatique

Pythonista depuis ~2009

J’ai répondu en 2022 à une offre d’emploi pour faire du Python …

2 !

Minute de silence pour Python2

Il nous a quitté il y a presque 5 ans …

😢

Petit sondage

  • Qui a déjà fait du Python 2 ?
  • Qui en a fait il y a moins de 4 ans ?
  • Moins d’1 an ?

Une histoire de Python

Une longue histoire (versions 0.x à 2.x)

Python démarre en Décembre 1989

rendu public en 1991

2.0 en 2000 (What’s new ?) :

  • passage sur SourceForge pour faciliter la collaboration
  • introduction des PEPs (PEP-1 - PEP Purposes and Guidelines)
  • type Unicode pour les strings
  • et bien d’autres choses …

Et les versions s’enchaînent jusqu’à …

Une longue histoire (en perspective)

Une belle histoire (v3.x)

Par rapport à la 2.x (PEP 3100) :

  • division flottante vs entière
  • que des new-style classes
  • fonction print
  • plus de string exceptions
  • != plutôt que <>
  • plus de long
  • Unicode par défaut !
  • tout est lazy (“x”)
  • plus de raw_input
  • context manager: with
  • PEP process
  • implicit namespace packages
  • set et dict literals
  • super() sans paramètre
  • nonlocal

Jusqu’à la 3.13 :

  • (3.1) OrderedDict, pure-Python import, meilleur str des float
  • (3.2) argparse, concurrent.futures
  • (3.3) yield from, faulthandler, unittest.mock, venv
  • (3.4) pip inclus, asyncio, enum, pathlib
  • (3.5) type hints, coroutines, unpacking (* et **)
  • (3.6) f-strings, async generators and comprehensions
  • (3.7) async/await, dataclasses, ordered dict par défaut
  • (3.8) walrus operator :=, = des f-strings
  • (3.9) str.removepre/suffix, stdlib avec des type hints
  • (3.10) structural pattern matching, plein de typing
  • (3.11) speed ! exceptions groups/notes, tomllib, encore du typing, deprecations
  • (3.12) super f-strings, GIL par interpréteur, meilleurs messages d’erreur, toujours du typing
  • (3.13) GIL optionnel, perf (JIT), color support, éternellement du typing, removals

Une histoire tragique

𝑼𝑵𝑰𝑪𝑶𝑫𝑬

L’absolu minimum que chaque dev doit vraiment, absolument savoir à propos d’Unicode et des jeux de caractères (pas d’excuses !)

Joel Spolsky

Arrêter avec l’ASCII (cf)

C’est la guerre !

TODO musique de sirène d’alarme, de tirs

Premières échafourées

  • les versions 3.0 (2008), 3.1 (2009) et 3.2 (2011) :
    • API peu stables, mauvaises perf, et bugs

faible adoption

Le conflit s’enlise

ça marche, pourquoi payer pour changer ?

  • 2.6 EOL en 2013, 2.7 EOL en 2016 (2010) puis EOL en 2020 (2014)

La course à l’armement

Des efforts sur la compatibilité entre 2.6/7 et 3.x :

  • la 3.3 a une syntaxe assez proche des 2.6/2.7
    • front-porting : u""
  • des backports sont réalisés
    • from __future__ import : division, absolute_import, print_function, unicode_literals
    • backports: abc, csv, inspect, os, range, statistics, …

Des outils pour assister à la migration :

Des guides :

Des listes :

La victoire

pas de spoiler : Python3 a gagné, Python2 a été sunset

  • les libs et les applications ont été portées
  • la bi-compatibilité a été dropée au fur-et-à-mesure
    • 2016 : Django, 2017 : Pandas, 2018 : Numpy, 2020 : Pip, Celery et Twisted, …
  • les environnements (hébergeurs Web, OS, compute, …) ne proposent plus Python2
    • 2018 : RHEL, 2022 : Debian, 2024 : Google App Engine, …
  • les conférences n’en parlent plus (🙃)

Des poches de résistance

Le prix de la guerre

Ma rencontre avec Python2

TODO

début en python3 jusqu’en 2022 Odoo, framework, pas de si grandes différences mais ensuite client qui fait du nucléaire appli en 2.6, sans test auto, avec des hacks de threads et subprocess test manuel uniquement pas de logging, pas de debuggeur

Conclusion

Should I use Python 2 or Python 3 for my development activity?

Python 3 is strongly recommended for any new development.

  • Python2 n’est pas mort, et ne mourra peut-être pas avant 2040.
  • Mais sauf si on me l’impose, Python2 n’est plus un “choix”.
  • Je pratique le Python3.6+, avec l’outillage et le typing moderne, et j’en suis heureux.

Et ça s’inscrit dans la raison d’être de Python :

  • la glue entre différents langages ayant une C-FFI
  • un langage plaisant à utiliser (comparé aux autres)

Sources

Principales, en plus des liens dans les slides :

Crédits

Images :

Web :

  • The Wayback Machine: Web.Archive.org
  • GitHub.com
  • PyPI.org

Pour aller plus loin

Live coding

TODO

Questions

?

Julien Lenormand

Dev / DevOps / Craft / Talk

LinkedIn/julien-lenormand

CFP

Je fais encore du Python2 en 2024…

Et c’est infernal ! Mais pourquoi s’infliger cette douleur ? Et au fait, qu’est-ce que ça change ?

Je voudrais vous partager ma frustration de devoir encore maintenir du code dans une version dépréciée du langage (c’est-à-dire vous vanter toutes les bonnes choses de Python3 !). Et ce sera l’occasion de faire un petit retour sur les origines du Python que nous aimons tant, son héritage qui perdure encore aujourd’hui (pour le meilleur et parfois pour le pire !).

Vous ferez gaffe à la prochaine offre d’emploi qui ne précise pas la version de Python ! :D